package com.example.gobang.api;

import com.example.gobang.mapper.UserMapper;
import com.example.gobang.model.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * Created with IntelliJ IDEA.
 * ClassName: UserAPI
 * Package: com.example.gobang.api
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 * Date: 2023-02-24
 * Time: 12:42
 */

@RestController
public class UserAPI {

    @Resource
    private UserMapper userMapper;


    @PostMapping("/login")
    @ResponseBody
    //作用其实是将java对象转为json格式的数据。
    public Object login(String username, String password, HttpServletRequest request){
        //关键 操作 根据username去数据库中查询
        //如果能匹配到用户，并且密码一致，就任务登录成功
        User user = userMapper.selectByName(username);
        System.out.println("[login] username= " + username);
        if (user == null || !user.getPassword().equals(password)){
            //登陆失败 没有查到 或者 查到了name 但是密码对不上
            System.out.println("登陆失败");
            return new User();
        }
        //登录成功之后 创建session会话
        //参数 ture 表示 当会话存在直接返回 会话不存在创建会话  false 不存在就直接返回空
        //这里是用户首次 登录 允许创建会话
        HttpSession httpSession = request.getSession(true);
        httpSession.setAttribute("user",user);
        return user;
    }

    //注册逻辑
    @PostMapping("/register")
    @ResponseBody
    public Object register(String username,String password){
        try {
            //username 不能重复 存在插入失败的可能
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            //其他字段 在xml中 sql语句已经写了初始值了
            userMapper.insert(user);
            return user;
        } catch (org.springframework.dao.DuplicateKeyException e){
            //出现异常 创建一个空对象 直接返回
            User user = new User();
            return user;
        }
    }

    //获取用户信息
    @GetMapping("/userInfo")
    @ResponseBody
    public Object getUserInfo(HttpServletRequest request){
        try{
            HttpSession httpSession = request.getSession(false);
            User user = (User) httpSession.getAttribute("user");
            return user;
        }catch (NullPointerException e){
            //查不到用户信息 出现空指针异常
            return new User();
        }
    }

}
